#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
直接调用RAG系统查看ES和Milvus的搜索结果

绕过Django API，直接调用底层搜索函数
"""

import os
import sys
import tempfile

# 添加项目路径
sys.path.append('/Users/baimu/PycharmProjects/2504A/bossxm/boss')

def test_direct_search():
    """直接测试搜索函数"""
    print("🔍 直接调用RAG搜索系统")
    print("=" * 60)
    
    try:
        # 导入RAG系统模块
        from resume_hybrid_search_system import (
            parse_resume_content,
            extract_key_info_from_resume,
            generate_resume_embeddings,
            search_jobs_by_keywords,
            search_jobs_by_vector
        )
        
        print("✅ RAG系统模块导入成功")
        
        # 创建测试简历
        test_content = """
李华简历

个人信息：
姓名：李华
工作经验：5年Java开发经验
教育背景：本科计算机科学
期望地点：北京
期望薪资：25000-35000

核心技能：
- Java, Spring Boot, Spring Cloud, MyBatis
- MySQL, Redis, Elasticsearch 
- Vue.js, React, JavaScript
- Docker, Kubernetes, Jenkins
- 微服务架构, 分布式系统

工作经历：
2019-2024 高级Java开发工程师 - 字节跳动
- 负责推荐系统后端开发
- 微服务架构设计和优化
- 高并发系统性能调优

项目经验：
1. 智能推荐系统
   - Spring Boot + Redis + Kafka
   - 日处理千万级数据
   
2. 电商平台微服务
   - Spring Cloud + MySQL + ES
   - 支持高并发交易
"""
        
        print("📄 Step 1: 解析简历内容...")
        
        # 创建临时文件
        with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False, encoding='utf-8') as f:
            f.write(test_content.strip())
            temp_file = f.name
        
        # 解析简历
        resume_text = parse_resume_content(temp_file)
        print(f"   ✅ 简历解析完成，文本长度: {len(resume_text)}")
        
        # 提取关键信息
        resume_info = extract_key_info_from_resume(resume_text)
        print(f"   ✅ 关键信息提取完成")
        print(f"   📊 技能数量: {len(resume_info.get('skills', {}).get('all_skills', []))}")
        print(f"   💼 工作经验: {resume_info.get('experience_years', 0)} 年")
        print(f"   🎓 教育背景: {resume_info.get('education', '')}")
        print(f"   📍 期望地点: {resume_info.get('preferred_location', '')}")
        
        print(f"\n🔍 Step 2: 执行ES关键词检索...")
        print("-" * 40)
        
        # ES检索
        es_results = search_jobs_by_keywords(resume_info, top_k=10)
        
        print(f"\n🧠 Step 3: 执行Milvus语义检索...")
        print("-" * 40)
        
        # 生成简历向量
        resume_embedding = generate_resume_embeddings(resume_info)
        print(f"   📊 简历向量维度: {len(resume_embedding)}")
        
        # Milvus检索
        milvus_results = search_jobs_by_vector(resume_embedding, top_k=10)
        
        print(f"\n🔄 Step 4: 执行结果融合（新增高级去重）...")
        print("-" * 40)
        
        # 导入融合函数
        from resume_hybrid_search_system import merge_and_rank_results
        
        # 执行融合（包含新的去重逻辑）
        final_results = merge_and_rank_results(es_results, milvus_results)
        
        print(f"\n📊 搜索结果汇总:")
        print(f"   🔍 ES检索结果: {len(es_results)} 个")
        print(f"   🧠 Milvus检索结果: {len(milvus_results)} 个")
        print(f"   🎯 融合后结果: {len(final_results)} 个")
        
        # 分析重复项（老方法）
        es_ids = set(job.get('job_id', '') for job in es_results)
        milvus_ids = set(job.get('job_id', '') for job in milvus_results)
        overlap_ids = es_ids & milvus_ids
        
        print(f"   🔄 Job_ID重叠: {len(overlap_ids)} 个")
        if overlap_ids:
            print(f"   🆔 重叠job_id: {list(overlap_ids)[:5]}...")
        
        # 显示最终推荐
        print(f"\n🎯 最终推荐结果 (前3个):")
        for i, job in enumerate(final_results[:3], 1):
            print(f"   【{i}】{job.get('title')} @ {job.get('company_name')} - {job.get('city_name')}")
            print(f"       job_id: {job.get('job_id')}")
            print(f"       来源: {', '.join(job.get('sources', []))}")
            print(f"       ES分数: {job.get('es_score', 0):.3f}, Vector分数: {job.get('vector_score', 0):.3f}")
            print(f"       最终分数: {job.get('final_score', 0):.3f}")
        
        # 清理临时文件
        os.unlink(temp_file)
        
        print(f"\n✅ 搜索测试完成!")
        print(f"💡 上面的输出显示了ES和Milvus的详细搜索结果，以及改进的去重效果")
        
    except ImportError as e:
        print(f"❌ RAG系统导入失败: {e}")
        print("💡 请确保在正确的Python环境中运行")
        
    except Exception as e:
        print(f"❌ 搜索测试失败: {e}")
        import traceback
        print(f"🔍 错误详情: {traceback.format_exc()}")

if __name__ == "__main__":
    test_direct_search()
